// a Genetic SelectionSort
// By Ben 02/10/2018

#include <iostream>
using namespace std;

template<typename T>
void SelectionSort(T* Items, int Size){
	int min = 0;
	T tmp;

	for (int i = 0; i < Size - 1; i++){
		//Get the min item in the array
		min = i;
		for (int j = i + 1; j < Size; j++){
			//Check if items j is less then items min
			if (Items[j] < Items[min]){
				//Set min to j
				min = j;
			}
		}
		//Swap array items
		tmp = Items[i];
		Items[i] = Items[min];
		Items[min] = tmp;
	}
}

void Display(int *Nums, int Size){
	for (int i = 0; i < Size; i++){
		if (i < Size-1){
			std::cout << Nums[i] << ", ";
		}
		else{
			std::cout << Nums[i];
		}
	}
	std::cout << endl;
}

int main(){

	int nums[] = { 5, 7, 2, 6, 4, 1, 3, 10, 40, 12, 13, 16, 20, 15, 17 };
	int n_size = sizeof(nums) / sizeof(int);

	//Output un-sorted
	std::cout << "Unsorted : ";
	Display(nums, n_size);

	//Sort array
	SelectionSort<int>(nums, n_size);
	//Output sorted
	std::cout << "Sorted : ";
	Display(nums, n_size);

	system("pause");
	return 0;
}